package com.heima.sjms.template;

/**
 * 抽象类和接口的区别？
 *  1. 语法层面的区别？
 *      a. 成员变量： 抽象类有，接口有，但是只能定义为public static final修饰的公共常量
 *      b. 成员方法： 抽象类既可以定义普通方法，也可以定义抽象方法；
 *                      接口只能定义抽象方法，jdk8推出了新特性后，支持default修饰的默认方法，
 *                      支持static修饰的静态方法，jdk9开始支持private修饰的私有方法。
 *      c. 构造方法： 抽象类有，接口没有
 *
 *  2. 设计层面的区别？
 *      a. 抽象类作为父类设计，重在提取子类的共性，主要解决多个子类的代码设计的复用性问题。
 *      b. 接口作为方法规范设计，重在约定!
 *      c. 类和类的关系在java中是单继承。类和接口的设计是多实现。 接口和接口的设计是多继承。
 */

public class Demo {
    public static void main(String[] args) {
        EatTemplate template = new ZhangSan();
        template.eat();
    }
}

interface SchoolRule extends CountryRule , ProvinceRule{
    //不能迟到
    void cd();
}

interface CountryRule{
    //不能违法
    void wf();
}

interface ProvinceRule{
    //不能搞传销
    void cx();
}


interface Inter{
    void method01();
    default void method02(){
        method();
        System.out.println("嘿嘿嘿，升级了...");
    };

    default void method03(){
        method();
        System.out.println("嘿嘿嘿，又升级了...");
    };

    private void method(){
        System.out.println("helloworld");
        System.out.println("helloworld");
        System.out.println("helloworld");
        System.out.println("helloworld");
        System.out.println("helloworld");
    }
}

class InterImpl implements  Inter{

    @Override
    public void method01() {
        System.out.println("重新了method01....");
    }
}